#ifndef SLANEDITWIDGET_H
#define SLANEDITWIDGET_H

#include <Qsci/qsciscintilla.h>

class QsciScintilla;
class QAction;
class QString;

class SlanEditWidget : public QsciScintilla
{
    Q_OBJECT
public:
    enum SLexerStyle
    {
        lsNone, lsPascal, lsBash, lsCpp, lsCsharp, lsCss,
        lsHtml, lsJava, lsJs, lsLua, lsPython, lsPerl,
        lsRuby,lsSql,lsXml,lsYaml,lsTcl
    };


public:
    SlanEditWidget(QWidget *parent = 0);

    void setTitle();                                        //设置标题
    QAction* windowMenuAction() { return  actionFocus; }
    static QString strippedName(const QString&fileName);    //解析出文件名

    QString userFriendlyCurrentFile();              //获取文件名
    void setCurrentFile(const QString& fileName);   //设置当前文件文件名
    void setActionText(const QString& txt);





    void newFile();                     //新建文件
    bool save();                        //保存
    bool saveAs();                      //另存为
    bool saveFile(const QString&);      //保存文件
    bool openFile(const QString&);      //打开文件
    bool loadFile(const QString&);      //加载文件
    bool okToContinue();                //判断文件是否需要保存
    void setCurLexer(SLexerStyle);      //根据文件的类型设置高亮样式
    SLexerStyle getFileLexerStyle(const QString&);  //获取文件的类型
    SLexerStyle getCurLexerStyle();     //获取当前高亮样式
    SLexerStyle getLexerStyle(QsciLexer &); //转换QsciLexer为对应的QsciLexer


private slots:
    void documentWasModified();         //文件改变后发射信号

protected:
    void closeEvent(QCloseEvent*event); //关闭事件

signals:
    void redoAvailable(bool);           //撤销信号
    void undoAvailable(bool);           //恢复信号

private:
    QAction * actionFocus;              //
    QString curFileName;                //文件名
    bool isUntitled;                    //记录是否为新文件
    QsciLexer *curLexer;                //当前语法分析器


};


#endif // SLANEDITWIDGET_H
